package com.yociyy.admin.controller;

import java.util.List;

import com.yociyy.admin.biz.BaseMenuBiz;
import com.yociyy.admin.model.entity.BaseMenu;
import com.yociyy.common.core.msg.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 系统管理-菜单信息管理
 *
 * @author wanghaobin，Y.yang
 * @date 2019-12-12
 */
@RestController
@RequestMapping("menu")
public class BaseMenuController {

	@Autowired
	private BaseMenuBiz menuBiz;

	/**
	 * 条件查询全部菜单信息
	 *
	 * @param menu 条件查询
	 * @return 菜单信息列表
	 */
	@GetMapping("/list")
	public R list(BaseMenu menu) {
		return R.success(menuBiz.selectMenuList(menu));
	}

	/**
	 * 查询全部菜单树(不包含按钮信息)
	 *
	 * @return 菜单列表
	 */
	@GetMapping("/all")
	public R treeAll() {
		return R.success(menuBiz.getMenuTreeAll());
	}

	/**
	 * 通过菜单id查询菜单信息
	 *
	 * @param id 菜单id
	 * @return 菜单信息
	 */
	@GetMapping("/get/{id}")
	public R get(@PathVariable int id) {
		// return R.success(menuBiz.selectById(id));
		return null;
	}

	/**
	 * 新增菜单信息
	 *
	 * @param menu 菜单信息对象
	 * @return 结果
	 */
	@PostMapping
	public R addMenu(@RequestBody BaseMenu menu) {
		menuBiz.insertMenu(menu);
		return R.success();
	}

	/**
	 * 更新菜单信息
	 *
	 * @param menu 菜单信息对象
	 * @return 结果
	 */
	@PutMapping
	public R putMenu(@RequestBody BaseMenu menu) {
		if (menu.getId().equals(menu.getParentId())) {
			return R.error("操作失败，上级菜单不能是自己");
		}
		menuBiz.updateMenu(menu);
		return R.success();
	}

	/**
	 * 通过主键id 删除菜单信息
	 *
	 * @param id 菜单id
	 * @return 结果
	 */
	@DeleteMapping("/{id}")
	public R del(@PathVariable("id") Long id) {
		if (menuBiz.checkHasChildByMenuId(id)) {
			return R.error("菜单存在子节点，不允许删除");
		}
		if (menuBiz.checkMenuExistRole(id)) {
			return R.error("菜单存在关联角色，请解除角色关联后再试");
		}
		menuBiz.deleteById(id);
		return R.success();
	}

	/**
	 * 查询菜单信息通过角色id
	 *
	 * @param id 角色id
	 * @return 菜单信息列表
	 */
	@GetMapping("/get/role/{id}")
	public R getMenuIdsByRoleId(@PathVariable Long id) {
		return R.success(menuBiz.getMenuIdsByRoleId(id));
	}

	/**
	 * 查询菜单信息通过用户id（当前登录用户所拥有的菜单权限）
	 *
	 * @return 菜单列表
	 */
	@GetMapping("/get/user")
	public R getMenuByUserId() {
		return R.success(menuBiz.getMenuByUserId());
	}

}
